﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AGPR.Locadora.Data;
using AGPR.Locadora.Utils;

namespace AGPR.Locadora.Model
{
    /// <summary>
    /// Classe que possui os dados de um CEP (Código de Endereçamento Postal)
    /// </summary>
    public class CEP
    {
        private static ActiveRecord db = ActiveRecord.Instancia;

        #region Atributos

        /// <summary>
        /// Nome da View de Cep no Banco de Dados
        /// </summary>
        const string VIEW = "vw_cep";

        /// <summary>
        /// Número do CEP
        /// </summary>
        public string cep { get; set; }

        /// <summary>
        /// Logradouro do Endereço
        /// </summary>
        public string endereco { get; set; }

        /// <summary>
        /// Tipo de Endereço (Ex: Av.)
        /// </summary>
        public string tipo_endereco { get; set; }

        /// <summary>
        /// Nome do Bairro
        /// </summary>
        public string bairro { get; set; }

        /// <summary>
        /// Nome da Cidade
        /// </summary>
        public string cidade { get; set; }

        /// <summary>
        /// Nome do Estado
        /// </summary>
        public string estado { get; set; }

        /// <summary>
        /// Sigla do Estado
        /// </summary>
        public string sigla_estado { get; set; }

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor que pode receber os dados para popular a instância
        /// </summary>
        /// <param name="dados">Dados a serem populados</param>
        public CEP(dynamic dados)
        {
            if (dados != null)
            {
                this.cep = dados["cep"];
                this.endereco = dados["endereco_full"].Trim();
                this.tipo_endereco = dados["tipo_endereco"].Trim();
                this.bairro = dados["nome_bairro"].Trim();
                this.cidade = dados["nome_cidade"].Trim();
                this.estado = dados["nome_estado"];
                this.sigla_estado = dados["sigla_estado"];
            }
        }

        #endregion

        #region Get

        /// <summary>
        /// Faz uma consulta na base de dados pelo CEP especificado e retorna uma instância de CEP
        /// </summary>
        /// <param name="cep">Número do CEP a ser consultado</param>
        /// <returns>CEP</returns>
        public static CEP Get(string cep)
        {
            var consulta = db.where("cep", Format.limparNumero(cep)).selectOne(VIEW);

            return new CEP(consulta);
        }

        #endregion
    }
}
